//
//  APIResponseError.swift
//  CodingTest
//
//  Created by LYPC on 2021/11/18.
//

import UIKit

public extension Error {
    var error: APIResponseError {
        return (self as? APIResponseError) ?? APIResponseError.err(self)
    }
}

public typealias NetErrorCallback = ((APIResponseError?) -> Void)?

public enum APIResponseError: Error {
    
    case net(code: Int, msg: String?)
    case msg(String)
    case err(Error?)
    case expired
}

public extension APIResponseError {
    
    var code: Int {
        switch self {
        case .net(let code, _):
            return code
        case .expired:
            return 401
        default:
            return 600
        }
    }
    
    var msg: String {
        return description
    }
    
    var description: String {
        switch self {
        case .net(_ ,let str):
            return str ?? "网络异常，请重试"
        case .msg(let str):
            return str
        case .err(let error):
            var des = error?.localizedDescription ?? ""
            if des.contains("似乎已断开与互联网的连接")  {
                des = "当前网络不可用，请检查您的网络"
            } else if des.contains("无法链接") {
                des = "当前网络不可用，请检查您的网络"
            } else if des.contains("超时") {
                des = "请求超时"
            }
            return des
        case .expired:
            return "登录信息过期, 请重新登录"
        }
    }
}

